﻿using System.Collections.Generic;
using System.Reflection;
using AccesoDatos.Fabricas;
using Comandos.Interfaces;
using ObjetosComunes.Entidades;
using ObjetosComunes.Logger;
using ObjetosComunes.Recursos;

namespace Comandos.Implementacion.ComandosEstado
{
    /// <summary> Comando que obtiene la lista de estados de una ciudad </summary>
    public class ObtenerEstado :IComando<List<Estado>>
    {
        #region Atributos

        /// <summary> Datos de la ciudad a consultar los estados </summary>
        private Ciudad _ciudad;

        #endregion

        #region Constructores

        /// <summary> Constructor de la clase </summary>
        /// <param name="ciudad">Datos de la ciudad a consultar los estados</param>
        public ObtenerEstado(Ciudad ciudad)
        {
            _ciudad = ciudad;
        }

        #endregion

        #region Implementation of IComando<List<Estado>>

        /// <summary> Metodo que ejecuta la accion del comando </summary>
        /// <returns></returns>
        public List<Estado> Ejecutar()
        {
            #region Instrumentacion Entrada

            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));

            #endregion

            var dao = FabricaDao.ObtenerFabrica(TipoFabrica.Mysql).ObtenerDaoEstado();
            var retorno = dao.ObtenerEstado(_ciudad);

            #region Instrumentacion Salida

            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));

            #endregion

            return retorno;
        }

        #endregion
    }
}
